package controller

import (
	"github.com/gin-gonic/gin"
	"myproject/model"
	"myproject/utils"
	"regexp"
)

func UserRegister(newsGrp *gin.RouterGroup) {
	newsGrp.Use().GET("/addUser", addUser)
	newsGrp.Use().POST("/login", login)
}

// 发送验证码
func addUser(c *gin.Context) {
	//获取参数
	mobile := c.Query("mobile")
	//真则表达式，验证手机号是否合法
	res := "^1[3-9]{1}\\d{9}$"
	//匹配真则的方法
	result := regexp.MustCompile(res)
	//返回 MatchString 是否匹配
	flag := result.MatchString(mobile)
	if !flag {
		c.JSON(200, gin.H{
			"code": "10001",
			"msg":  "手机号不正确",
		})
	} else {
		//从redis中获取手机号的验证码
		r := utils.GetRedis()
		value := r.Get(mobile)
		//判断验证码是否为空
		if value == "" {
			//随机生成验证码
			code := utils.RandInt(10000, 99999)
			//调用发送短信接口
			utils.SendSms(mobile, code)
			//存入redis

			r.Setex(mobile, 60, code)
			c.JSON(200, gin.H{
				"code": "200",
				"mes":  "发送成功",
				"sms":  code,
			})
		} else {
			c.JSON(200, gin.H{
				"code": "10021",
				"msg":  "不能重复发",
			})
		}
	}
}

type UserLogin struct {
	Mobile string
	Code   string
}

func login(c *gin.Context) {
	//获取参数
	user_info := &UserLogin{}
	_ = c.Bind(user_info)
	mobile := user_info.Mobile
	code := user_info.Code
	if user_info.Mobile == "" || user_info.Code == "" {
		c.JSON(200, gin.H{
			"code": "10001",
			"msg":  "账号不能为空",
		})
	}
	//从redis中获取手机号的验证码
	r := utils.GetRedis()
	codes := r.Get(mobile)
	//判断验证码是否一致
	if code != codes {
		c.JSON(404, gin.H{
			"code": "10201",
			"msg":  "验证码错误",
		})
	} else {
		stu := &model.User{
			Name:   mobile,
			Mobile: mobile,
		}
		//加入数据库
		model.DB.Create(stu)
		//生成token返回
		token, _ := utils.ReleaseToken(stu.ID)
		c.JSON(200, gin.H{
			"code":   "200",
			"msg":    "登陆成功",
			"userid": stu.ID,
			"token":  token,
		})
	}

}
